package com.stt.videoprocess.design.processor.impl;

import com.stt.videoprocess.design.model.VideoTask;
import com.stt.videoprocess.design.processor.VideoProcessor;
import lombok.extern.slf4j.Slf4j;

/**
 * 滤镜处理装饰器
 * 实现多种滤镜效果叠加功能
 */
@Slf4j
public class FilterProcessor implements VideoProcessor {
    /**
     * FilterProcessor类用于对视频任务应用特定的过滤器
     * 它封装了一个VideoProcessor实例和一个过滤器类型字符串
     */
    private final VideoProcessor processor; // 用于处理视频任务的VideoProcessor实例
    private final String filterType; // 过滤器的类型

    /**
     * 构造函数，初始化FilterProcessor实例
     *
     * @param processor VideoProcessor的实例，用于后续的视频处理
     * @param filterType 过滤器的类型，用于标识和应用特定的处理逻辑
     */
    public FilterProcessor(VideoProcessor processor, String filterType) {
        this.processor = processor;
        this.filterType = filterType;
    }

    /**
     * 处理视频任务的方法，在应用过滤器前委托给内部的VideoProcessor实例进行处理
     *
     * @param task 待处理的视频任务
     * @throws Exception 如果处理过程中发生错误，抛出异常
     */
    @Override
    public void process(VideoTask task) throws Exception {
        // 显示当前要应用的过滤器类型
        log.info("使用 " + filterType + " 滤镜...");
        // 委托VideoProcessor实例处理视频任务
        processor.process(task);
        // 更新视频任务的处理步骤信息，记录下应用的过滤器类型
        task.setProcessingSteps(task.getProcessingSteps() + "使用滤镜: " + filterType + "\n");
    }

    /**
     * 获取处理器的名称，用于标识FilterProcessor实例
     *
     * @return 返回处理器的名称，格式为"FilterProcessor[过滤器类型]"
     */
    @Override
    public String getProcessorName() {
        return "FilterProcessor[" + filterType + "]";
    }
}